#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Mikan ツール パッケージ

Mikan Python Web Framework
"""

__author__ = "K.Sonohara"
__status__ = "develop"
__version__ = "0.0.0_34"
__date__    = "2013/12/15"
__license__ = 'LGPL'

# ------------------------------------------------------------
## インポート
# ------------------------------------------------------------
# Python
import os
import sys
sys.path.append(".")
sys.path.append("src")

# ESiPC
from esipc import ESiPCProperty
from esipc.resource.iniresource import ESiPCINIFileResourceBundle

# Mikan
from mikan.core import AbstractMikan
from mikan.webapp import MikanWebapp
from mikan.request import MikanRequest

# ------------------------------------------------------------
## 変数
# ------------------------------------------------------------

# ------------------------------------------------------------
## 関数
# ------------------------------------------------------------

# ------------------------------------------------------------
## クラス
# ------------------------------------------------------------

# ------------------------------------------------------------
## Mikan 抽象メイン クラス
class AbstractMikanMain(AbstractMikan):

	# ----------------------------------------------------
	## コンストラクタ
	def __init__(self):
		# 継承元実行
		super(AbstractMikanMain, self).__init__()

	# ----------------------------------------------------
	## 初期化
	def init(self):
		pass

	# ----------------------------------------------------
	## 開放
	def destory(self):
		pass

	# ----------------------------------------------------
	## 事前処理
	# @return 終了コード(0なら続行)
	def prepare(self):

		# 処理結果
		return 0

	# ----------------------------------------------------
	## 処理
	# @return 終了コード(0なら続行)
	def perform(self):
		return 0

	# ----------------------------------------------------
	## 実行
	# @return 終了コード
	def execute(self):
		try:
			# 初期化
			self.init()

			# 事前処理
			pre = self.prepare()
			if pre != 0:
				return pre

			# 処理
			return self.perform()
		finally:
			# 開放
			self.destory()

class AbstractMikanWebAppMain(AbstractMikanMain):

	def get_webapp(self):
		return self.FWebApp

	def get_request(self):
		return self.FRequest

	# ----------------------------------------------------
	## コンストラクタ
	def __init__(self, root=""):
		# 継承元実行
		super(AbstractMikanWebAppMain, self).__init__()

		self.FWebApp = None
		self.FRequest = None
		self.init_mikan(root)

	def init_request(self, webapp):
		return MikanRequest(self.webapp)

	def init_webapp(self, reloading, mikan_root, mikan_config):
		return MikanWebapp(reloading, mikan_root, mikan_config)

	# ----------------------------------------------------
	## 初期化
	def init_mikan(self, mikan_root):
		self.FWebApp = self.init_webapp(reloading=False, mikan_root=mikan_root, mikan_config=mikan_root + 'etc')
		self.FRequest = self.init_request(self.webapp)

	# ----------------------------------------------------
	## Property
	webapp = ESiPCProperty(get_webapp, None, None)
	request = ESiPCProperty(get_request, None, None)

# ------------------------------------------------------------
## メイン関数
# ------------------------------------------------------------
if __name__ == '__main__':
	pass

# ------------------------------------------------------------
